Optimized delivery of web application code

ABSTRACT

Application code for deployment to a client over a data link is optimized to minimize download time by supplying only the application code with a particular object that is required by the object. In a web application that includes multiple pages, the HTML and JAVASCRIPT are scanned to identify code resources called by a particular web page. When all called resources are identified, they are extracted and concatenated into a single resource file. When the page is downloaded to the client, the import file is included with the page. The import file may be cached so that it need only be downloaded once, rather than being downloaded every time the page is requested. The invention is suitable for use with other interpreted scripting languages.

CROSS REFERENCE TO RELATED APPLICATIONS

The present application is a continuation of U.S. application Ser. No.13/620,850, filed Sep. 15, 2012, which is a continuation of U.S.application Ser. No. 13/104,290, filed May 10, 2011 now issued as U.S.Pat. No. 8,713,586, which is a continuation of U.S. application Ser. No.11/761,287, filed on Jun. 11, 2007 now issued as U.S. Pat. No.7,966,626, which is a continuation of U.S. application Ser. No.10/203,043, filed Aug. 2, 2002 now issued as U.S. Pat. No. 7,231,644,which is a national stage entry of PCT application numberPCT/US01/02962, filed on Jan. 30, 2001, which claims the benefit of andpriority to U.S. provisional application No. 60/180,378 filed on Feb. 4,2000. Each of the aforementioned patent(s) and application(s) areincorporated by reference in their entirety.

FIELD OF THE INVENTION

The invention relates to the field of data processing. Moreparticularly, the invention relates to a method of optimizingapplication code for delivery to a client over a data connection, inwhich only those parts of the application code needed by a particularobject within the application are delivered to the client with theobject, thus minimizing download time.

DESCRIPTION OF RELATED ART

In the world of web applications, developers face severe limitationswhen trying to deploy client-side functionality. In general, gooddevelopment practice pushes developers toward the creation of a richbase of generalized code to draw from. This code base frequently becomesvery diverse in the functionality it supports and very complicated inthe dependencies, as more and more code is written that depends on thecode that existed prior to it. This generalized code base is extremelypowerful as it allows the rapid development of applications. And, in thetraditional world of desktop applications, where memory and bandwidthare secondary constraints, deploying such a rich and weighty system hasbeen moderately straightforward.

Web applications, on the other hand, are strictly limited in the amountof code that can be delivered to the client. A web application is littlemore than a set of web pages that support different functionalities. Forexample, a web presentation application may have one page for each ofthe following functions:

-   -   viewing the users' presentations;    -   editing a presentation; and    -   viewing a presentation.

Thus, there is a dramatic limitation when it comes to delivering theclient side functionality. A traditional desktop application may take 30Mbytes of code to run—a conservative estimate. On a 56K modem line, thismuch information takes at least ten minutes to transfer to the client.It is unreasonable to expect the typical web user to wait this long fora page to load.

This leads to the problem addressed by this invention—that of deployingcode to the client in an efficient and optimized manner.

The prior art provides various strategies and systems for optimizingapplication code in the web environment. For example, B. Muschett, W.Tracey, S. Woodward, Method and system in a computer network forbundling and launching hypertext files and associated subroutines withinarchive files, U.S. Pat. No. 6,026,437 (Feb. 15, 2000) describe a methodand system in a computer network in which a HTML file having tags thatpoint to particular applets is bundled into an archive file with theapplets and the data associated with the applets. In response to aclient request to download the hypertext file; the file, the applets,and associated data are downloaded as a single archive file. While thedescribed invention reduces download time by increasing data packagingefficiency and eliminating the need for multiple data requests to theserver for multiple objects; the single object created, incorporatingthe hypertext page, the applet or applets and the associated data,results in a large data object, which itself, requires substantialdownload time. Furthermore, the described system makes no attempt toreduce the amount of data downloaded; it merely packages and transmitsit more efficiently. Moreover, since the hypertext file and the appletare packaged together in the same archive file, both applet andhypertext file must be downloaded every time the client requests thehypertext file. C. Bryant, T. Goin, T. Moos, D. Steele, Apparatus andmethod for increasing the performance of interpreted programs running ona server, U.S. Pat. No. 6,141,793 (Oct. 1, 2000) describe an apparatusand method in which interpreted scripts, such as CGI scripts areconsolidated into a single process, similar to a library of interpretedcode routines. When the process is to be executed, the interpretedprocess forks its self and has the resulting child process run thealready compiled interpreted code. In this way, the interpreted codeneed only be compiled once, rather than compiling over and over again.While the described invention improves the performance of theinterpreted program by eliminating redundant processing steps, it is notconcerned with optimizing the interpreted code, or providing only thosecode sections that are necessary for the task at hand. Furthermore, thedescribed invention is concerned only with server side programs, it hasnothing to do with interpreted programs and scripts run on the clientside, and it is unconcerned with minimizing download time by reducingthe amount of code to be downloaded to and interpreted on the client.

There exists, therefore a need in the art for a method of deployingapplication code to a client in an efficient and optimized manner. Itwould be highly desirable to reduce the amount of data to be downloadedby optimizing code in such a way that only that code needed by aparticular object, for example a web page, is supplied to the clientwith the object, so that download time is minimized. Furthermore, itwould be desirable to cache the application code on the client, so thatthe optimized code need only be downloaded once, instead of every timethe object is requested from the server.

SUMMARY OF THE INVENTION

The invention provides a procedure for optimizing application code fordeployment to a client over a data link, wherein only the code needed bya given object within said application is supplied to the client withsaid object, so that download time is greatly minimized.

In a preferred embodiment, the invention is directed to webapplications, in which the application includes one or more web pages,based on HTML files. The HTML code may contain embedded blocks of codewritten in an interpreted scripting language such as JAVASCRIPT.Additionally, the HTML code may refer to separate import files of code,also written in a language such as JAVASCRIPT. The web pages may includeone or more functionalities that depend on the JAVASCRIPT code.

Prior to deployment, the application code, both the HTML and theJAVASCRIPT are scanned, using a suitable parsing tool. During parsing,code entry points, points in the code that call resources such asmethods and functions, are identified. All available resources, in theHTML, and the JAVASCRIPT are identified, and a resource list, thatincludes a description of every resource available, is created. The callpath at each entry point is followed and all resources required by theweb page are identified. The required resources are extracted andconcatenated into a new import file, after which the HTML code isupdated to refer to the newly created file.

During use, the newly created import file is downloaded to the clientwith the accompanying web page. The import file is cached on the client,eliminating the necessity of downloading the import file more than once.

BRIEF DESCRIPTION OF THE DRAWINGS

FIG. 1 provides a diagram illustrating code dependencies in a typicalweb application;

FIG. 2 provides a top-level block diagram of a procedure for optimizingweb application code for download to a client, according to theinvention;

FIG. 3 provides a block diagram of a sub-procedure for scanningapplication code from the procedure of FIG. 2, according to theinvention;

FIG. 4 provides a block diagram of a sub-procedure for identifying allresources called by a particular page from a web application, from theprocedure of FIG. 2, according to the invention; and

FIG. 5 provides a block diagram of a sub-procedure for providing a newimport file containing only the application code needed by the web pageof FIG. 4, according to the invention.

DETAILED DESCRIPTION

FIG. 1 provides a diagram illustrating code dependencies in a page froma typical web application 10. In response to a client request, a file ofHTML code 11 is transmitted to the client. Upon processing the HTMLcode, the client displays to the user a web page 12. As previouslyindicated, web pages may include various functionalities. They are giventhese functionalities by calling various resources, the resourcesconsisting of code blocks that perform specific tasks. Generally,resources may be functions, methods, procedures or sub-routines.Resources may be written either in a compiled language such as JAVA orC⁺⁺, or they may be written in an interpreted scripting language such asJAVASCRIPT or VBSCRIPT. In its preferred embodiment, the invention isdirected primarily to code written in these scripting languages, whichare supported by most web browsers. Code for the resources may exist ascode blocks embedded in the HTML code (not shown) or the HTML maycontain tags that refer 13 to an import file of code 14. As indicated inFIG. 1, the import file may be a file of JAVASCRIPT code. The examplepage shown in FIG. 1 is a registration page in which the user entersinformation such as name, address, and e-mail address in text fields ortext areas. The underlying HTML contains code for a text area 15 a. Uponprocessing the code, the client, or web browser, displays acorresponding text area 15 b, according to the specifications of theHTML code 15 a. As in this example, HTML forms generally include someform of validation script to ensure that the user is entering thecorrect type of information in the form field in the correct format. Inthis case, the text area 15 b is an address field and the underlyingcode 15 a calls a function, ValidateAddress( ) 16 to validate dataentered into the field by the user. The function ValidateAddress( ) isfound in the JAVASCRIPT import file FORM.JS referenced by the HTML file.The ValidateAdress( ) function further calls a method, parse( ) 17,found in another JAVASCRIPT import file, STRING.JS, along with a numberof other methods that are not needed by the web page. Depending on theapplication, in order to obtain a few lines of code needed for a singleweb page, a client may need to download hundreds or even thousands oflines of code

Due to the nature of web applications, the optimal solution is todeliver only that code which is explicitly needed by any given web page.This dramatically reduces the amount of code that needs to be deployedand, consequently, the amount of time a web user spends waiting for apage to finish loading.

The invention works by creating a dependency tree of the code that isrequired to implement the functionality needed on a certain web page. AsFIG. 2 shows, the “root” of this tree can be found by parsing the HTML20 that is served up to the client to discover which resources arecalled by the page in response to various events. With these functionsas entry points, it is then determined which functions they, in turn,call. This second set of resources is in turn scanned, and so on until acomplete set of all the required code is obtained 21. Once the set ofrequired code is determined, that code is delivered to the client byconcatenating all of the required resources into a new import file 22,which is served up to the client with the web page. The invented codeoptimization is typically implemented as a final development step priorto deployment of the web application.

Code Scanning (20)

Preferably, a code-parsing tool is used to automatically scan throughthe application code to generate the set of required code. This has theadvantage that it dynamically creates a dependency tree, or a list ofresources that is ordered according to code dependencies. Variousparsing tools are suitable for the invention: for example, the RHINOJAVASCRIPT engine, provided by AOL-Netscape of Mountain View Calif., orscripts written in a language such as PERL. Any parsing tool thatsupports 10, collections, arrays and hash maps and that is capable ofmanipulating files would be suitable. Additionally, various notationsystems can be used that allow developers to mark which resources(functions) a particular block of code requires as they are developingthe code.

As FIG. 3 shows, scanning the code first involves identifying entrypoints in the code 31. As described above, these entry points consist ofinitial resource calls, primarily in the HTML code. Entry points mayinclude:

-   -   HTML tags that incorporate JAVASCRIPT statements;    -   Actions associated with various web page elements, such as        forms; and    -   DOM events (document object model) events. Typically, DOM events        are found in JAVASCRIPT import files.

Resource calls may be for functions, methods, procedures or sub-routinesor any code block that performs a specific task. While the invention isdescribed in relation to JAVASCRIPT, such description is exemplary only.In fact, the invention is equally applicable to other interpretedscripting languages such as VBSCRIPT.

In addition to identifying entry points, the parsing tool alsoidentifies blocks of JAVASCRIPT code embedded in the HTML 32 andidentifies all import files 33 required by the web page.

Identifying Required Resources (21)

Having identified code entry points, embedded script blocks and importfiles, the parsing tool is used to identify all available resources 41found in the HTML code, the embedded script code and the import files.As each resource is located, a resource information object is createdfor the resource 42. The information object is a data object containinga description of the resource, and may also include the code with whichthe resource is implemented. In the preferred embodiment of theinvention the resource information object includes:

-   -   resource name;    -   methods called by the resource;    -   optionally, the code implementing the resource;    -   optionally, the source file for the resource;    -   an ‘is-used’ field; and    -   an ‘is-real’ field.

Various data structures well known to those skilled in the art aresuitable for the implementation of the resource information object. Asindicated above, the resource information object may include the actualcode implementing the resource, or it may merely reference the sourcefile where the resource is to be found. Both the ‘is-used’ and the‘is-real’ fields are Boolean. The function of these two fields isexplained in detail below. A resource list is created 43 by creating anarray of all the resource information objects. The array is orderedaccording to the sequence in which the resource is encountered in theapplication code. While the array may be used as the final resourcelist, in the preferred embodiment of the invention, a hash map of thearray is provided as a lookup to optimize the resource list. In thishash map, keys consist of the resource names and values consist of thecorresponding resource information objects for the named resources. Inaddition to the actual resources, virtual functions may be created.Certain of the entry points may call more than one resource, or they mayhave more than one associated action. At a later step of the procedure,the HTML code is updated to refer to the import file containing all ofthe required resources. For those entry points that call more than onefunction, or that have more than one associated action, it is necessaryto create a placeholder in the code. Thus, virtual functions are createdthat incorporate the actions or resource calls associated with thatentry point. As previously indicated, the resource information objectincludes a Boolean ‘is-real’ field. In information objects describing avirtual function, the ‘is-real’ field is left unset. Thus, the ‘is-real’field is used to distinguish between actual resources and virtual. Firstidentifying all available resources in this manner provides an importantoptimization to the subsequent step of locating and extracting resourcesrequired by the web page.

Following creation of the resource list, the parsing tool steps throughthe call path at each previously identified entry point to identifythose resources that are actually used by the web page 44. It should benoted that the previously created resource list included all availableresources, plus any virtual resources created. The current stepidentifies those resources from all resources that are actually used. Asthe resources are identified, the ‘is-used’ field of the correspondinginformation object is set 45, thus indicating that the correspondingresource is one that is required by the web page. Each call path isfollowed until one of:

-   -   a resource is encountered that doesn't call any further        resources;    -   a resource is encountered that calls a system function;    -   a resource is encountered that already has the ‘is-used’ field        set.

Write to New File (22)

Once the required resources have been located and marked, they arewritten to a new import file. Those resources having the ‘is-used’ fieldset are extracted and concatenated into a new file 51. The resourcesmust be ordered in the new file in a manner that preserves the originaldependencies. In one embodiment of the invention, a dependency tree iscreated. However, since the information object for each resource refersto the resources called by that resource, this information may beutilized to order the resources in a manner equivalent to that of adependency tree.

Subsequently, the original HTML code is updated to refer to the newimport file 52. Thus, a single, compact import file, incorporating onlythe application code required by the web page is downloaded with thepage when it is requested 53. It is important to note that for any givenpage, this process generates a complete set of the code needed. Theprocess of determining and delivering the required code can be done on aper-page-request basis, but in most cases the code needed by aparticular page remains constant. If this is the case, the process canbe optimized by caching the required code for each page at “build” time.For example, when installing a page that edits a presentation slide, thebuild process could generate a corresponding script file dedicated tothat page. An important advantage of caching the required code in thisfashion is that it allows browser clients to cache the code using theirbuilt in caching mechanisms. Thus, when multiple requests for a page aremade, the code only needs to be delivered the first time.

The invention is embodied both as a procedure and as a computer programproduct embodied on a computer-usable medium that includes computerreadable coda means for performing the procedure. The computer-usablemedium may be a removable medium such as a diskette or a CD, or it mayalso be a fixed medium, such as a mass storage device or a memory.

Although the invention has been described herein with reference tocertain preferred embodiments, one skilled in the art will readilyappreciate that other applications may be substituted without departingfrom the spirit and scope of the present invention. Accordingly, theinvention should only be limited by the Claims included below.

1. A procedure for optimizing application code for deployment to aclient over a data link, wherein only the code needed by a given objectwithin said application is supplied to the client with said object, saidprocedure comprising the steps of: providing means for parsing saidcode; using said parsing means, scanning said application code toidentify all entry points and all available resources, wherein an entrypoint comprises a resource call; determining which of said resources arerequired by said object; and concatenating said required resources intoa single file; wherein said single file contains only code required bysaid object, so that download time for said application code isminimized.
 2. The procedure of claim 1, wherein said applicationcomprises a web application, and wherein said object comprises a webpage, said web application including at least one web page that includesat least one functionality, said web page comprising a file of HTML(hypertext markup language) code, said web page optionally includingembedded code blocks written in a scripting language, said applicationfurther comprising one or more import files of code written in saidscripting language.
 3. The procedure of claim 2, wherein said scriptinglanguage is comprises any of JAVASCRIPT and VBSCRIPT.
 4. The procedureof claim 2, wherein said resources are located in one or both of saidembedded code sections and said import files.
 5. The procedure of claim3, wherein said step of scanning said application code to identify entrypoints comprises the steps of: scanning said HTML code; scanning saidembedded code sections; scanning said import files; and identifyingentry points contained therein.
 6. The procedure of claim 5, whereinsaid entry points include any of: HTML tags that incorporate JAVASCRIPTstatements; actions associated with web page elements; and DOM (documentobject model) events.
 7. The procedure of claim 6, wherein said actionsassociated with web page elements include HTML form actions.
 8. Theprocedure of claim 5, wherein identifying all available resourcescomprises the steps of: identifying said embedded code sections and saidimport files; identifying all available resources contained therein;creating a resource information object for each resource; and creatingat least one list of said information objects.
 9. The procedure of claim8, wherein said resources include any of: functions; virtual functions;methods; procedures; sub-routines; and any code block that performs aspecific task.
 10. The procedure of claim 9, wherein a virtual functioncomprises a placeholder in said HTML code, and wherein a virtualfunction includes either of: instructions and resources contained insaid embedded code blocks; where a web page element invokes a pluralityof functions, said plurality of functions.
 11. The procedure of claim 8,wherein said resource information object includes: resource name;methods called by said resource; optionally, implementation of saidresource; optionally, source file; an is-used' field; and an ‘is-real’field.
 12. The procedure of claim 11, wherein said ‘is-used’ and saidis-rear fields are Boolean fields, said ‘is-used’ field being set todenote a resource required b y said web page, and said is-real field'left unset to denote a virtual function.
 13. The procedure of claim 12,wherein said step of creating at least one list of said informationobjects comprises the step of: creating an array of said resourceinformation objects.
 14. The procedure of claim 13, wherein said step ofcreating at least one list of said information objects further comprisesthe step of creating a hash map of said information objects, whereinkeys in said hash map comprise resource names and corresponding valuescomprise information objects for the named resources.
 15. The procedureof claim 13, wherein said step of determining which of said resourcesare required by said object comprises the steps of: for each entrypoint, following a call path to identify required resources; for eachresource encountered on said call path, setting said ‘is-used’ field.16. The procedure of claim 15, wherein said call path is followed untilany of: a resource is encountered that doesn't call any other resources;a resource is encountered that calls a system function; a resource isencountered that already has the ‘is-used’ field set.
 17. The procedureof claim 16, wherein said step of compiling said required resources intoa single file comprises the steps of: writing each resource for whichthe ‘is-used’ field is set to a new import file, wherein said resourcesare written to said new import file in the order that they occur in saidapplication code; and updating said application code to refer to saidnew import file.
 18. The procedure of claim 1, wherein said parsing toolincorporates: IO support; and Support for collections, arrays, and hashmaps.
 19. The procedure of claim 18, wherein said parsing tool comprisesone of: a PERL script; and a JAVASCRIPT engine.
 20. The procedure ofclaim 1, wherein said single file is held in said client's cache afterdownloading, so that it need be downloaded only once.